package io;

import java.io.*;
import java.nio.charset.StandardCharsets;

/**JAVA IO将流按照读写单位划分为字节流与字符流
 * 字节流的超类:java.io.InputStream和OutputStream
 * 字符流的超类:java.io.Reader和java.io.Writer
 * 字节流是以字节为单位读写数据的流，字符流是以字符为单位读写数据的流。
 * 注：这两组超类是平级关系，互相不存在继承。
 *
 * 字符流都是高级流，作用是方便我们读写文本数据。
 *
 * 转换流:java.io.InputStreamReader和OutputStreamWriter
 * 它们继承自Reader和Writer
 * 它们是非常常用的字符流实现类，实际开发中我们不会直接操作这两个流，但是它们在
 * 流连接中是非常重要的一环。
 *
 * 在流连接中的意义
 *  * 由于其他的字符流在流连接中要求只能连接在其他字符流上，而不能直接连接在字节流上
 *  * 原因:字符流都是以字符为单位读写的，字节流是以字节为单位读写的，因为读写数据单位
 *  * 不同，因此不能直接串联在一起工作。
 *  * 转换流本身是一对字符流，而它们是唯一可以连接在字节流上的字符流，因此其他的字符
 *  * 流可以连接在转换流上，而转换流连接在字节流上，从而就可以实现串联在一起进行读写
 *  * 操作了。
 *  * 转换流的核心意义:
 *  * 1:负责字符与字节的转换工作
 *  * 2:串联其他字符流与下面的字节流工作(起到了转换器的作用)
 */
public class OSWDemo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("osw.txt");
        OutputStreamWriter osw = new OutputStreamWriter(
                fos,
                StandardCharsets.UTF_8
        );
//      fos.write("我祈祷拥有一颗透明的心灵，和会流泪的眼睛。".getBytes(StandardCharsets.UTF_8));
//      fos.write("给我再去相信的勇气，越过谎言去拥抱你。".getBytes(StandardCharsets.UTF_8));
        osw.write("我起到拥有一颗透明的心灵，和会流泪的眼睛。");
        osw.write("给我再去相信的勇气，越过谎言去拥抱你");
        System.out.println("写出完毕!");
        osw.close();

    }
}
